package com.example.gateway.designPattern.observer;

/**
 * @ClassName: Client
 * @Description:
 * @Author: YourName
 * @Date: 2024/12/31
 */

public class Client {

    public static void main(String[] args) {


        /*
        *  观察者模式
        *
        *    可以结合消息队列 来异步单独处理
        *
        *
        *   1. 定义对象间一种一对多的依赖关系，使得每当一个对象改变状态，则所有依赖于它的对象都会得到通知并自动更新。
        *   优点：
        *      1. 降低了目标与观察者之间的耦合关系，两者之间是抽象耦合关系。
        *
        *   缺点
        *      1. 目标与观察者之间的依赖关系并没有完全解除，而且有可能出现循环引用。
        *      2. 当观察者对象很多时，通知的发布会花费很多时间。
        *
        *
        *    使用场景：
        *        1. 一个抽象模型有两个方面，其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。
        */

        WechatServer wechatServer = new WechatServer();

        User user1 = new User("hr");
        User user2 = new User("stt");
        User user3 = new User("czy");

        wechatServer.registerObserver(user1);
        wechatServer.registerObserver(user2);
        wechatServer.registerObserver(user3);

        wechatServer.setInfomation(" hello world ");

        wechatServer.removeObserver(user2);

        wechatServer.setInfomation(" hello world 2 ");


    }
}
